package com.atguigu.rabbitmq.six;

import com.atguigu.rabbitmq.utils.RabbitMqUtils;
import com.rabbitmq.client.CancelCallback;
import com.rabbitmq.client.Channel;
import com.rabbitmq.client.DeliverCallback;

/*
* 演示目的，演示direct交换机
*
* 一个交换机绑定了一个队列，交换机和队列之间的routingkey是error
* */
public class ReceiveLogsDirect02 {

    public static final String EXCHANGE_NAME="direct_logs";

    public static void main(String[] args) throws Exception{
        /*利用Connection创建一个channel*/
        Channel channel = RabbitMqUtils.getChannel();
        /*声明一个交换机,第二个参数表示交换机的类型*/
        channel.exchangeDeclare(EXCHANGE_NAME, "direct");

        /*声明一个队列，临时队列，队列的名称是随机的
         *当消费者断开与队列的连接的时候，队列就自动删除了
         * */
        channel.queueDeclare("disk", false, false, false, null);
        /*将交换机与队列进行捆绑*/
        /*队列名称，交换机名称，routingkey*/
        channel.queueBind("disk", EXCHANGE_NAME, "error");
        System.out.println("等待接收消息，把接收到的消息打印在屏幕上面......");

        DeliverCallback deliverCallback=(consumerTag, message)->{
            System.out.println("ReceiveLogsDirect01控制台打印接收到的消息："+new String(message.getBody(),"UTF-8"));
        };

        CancelCallback cancelCallback = consumerTag->{
            System.out.println("取消消息的接收");
        };

        /*接收消息*/
        /*队列名，是否自动确认接收，接收消息回调，取消接收消息回调*/
        channel.basicConsume("disk", true, deliverCallback, cancelCallback);
    }

}